<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ page import="com.al.el.User, java.util.*" %>
<!DOCTYPE html>
<html>
	<head>
		<meta charset="UTF-8">
		<title>JSTL</title>
	</head>
	<body>
		<%--相当于request.setAttribute(key,value)
				var(key), value(value) --%>
		<c:set var="name" value="tom"></c:set>
		<%--默认是先存到pageContext中，我们可以设置属性 Scope 来指定作用域对象 --%>
		<c:set var="name" value="cat" scope="request"></c:set>
		${name }
		<hr>
		${requestScope.name }
		<hr>
		
		<%--set 不能直接存一个对象，但是可以对一个已经存在的对象进行属性修改 --%>
		<%
			User user = new User(1,"小喵",66.6);
			session.setAttribute("user",user);
		%>
		${sessionScope.user.name }
		<hr>
		<c:set target="${sessionScope.user }" property="name" value="小喵喵"></c:set>
		${sessionScope.user.name }
		<hr>
		
		<%--用 out 输出，如果为null的话，可以赋予提示（初始值) --%>
		<c:out value="${name }" default="未定义"></c:out>
		<hr>
		<c:out value="${sessionScope.name }" default="未定义"></c:out>
		<hr>
		
		<%--删除域对象中的数据 --%>
		<c:remove var="name" scope="page"></c:remove>
		<c:out value="${pageContextScope.name }" default="被删除了"></c:out>
		<hr>
		
		<%--catch 用来捕获异常信息，把可能出现异常的代码放到catch标签中,会把出现的异常存到var定义的变量中 --%>
		<c:catch var="error">
			<%
				int a = 10/0;
			%>
		</c:catch>
		${error }
		<hr>
		
		<%--if 和 choose 的使用 --%>
		<c:set var="num1" value="1"></c:set>
		<c:set var="num2" value="2"></c:set>
		<c:if test="${num1 > num2 }">ok</c:if>
		<c:if test="${num1 < num2 }">fail</c:if>
		<hr>
		<c:choose>
			<c:when test="${num1 > num2 }">ok</c:when>
			<%--相当于 else --%>
			<c:otherwise>fail</c:otherwise>
		</c:choose>
		<hr>
		
		<%--forEach 的其他属性 --%>
		<%
			List<String> list = new ArrayList<>();
			list.add("a");
			list.add("b");
			list.add("c");
			list.add("d");
			list.add("e");
			list.add("f");
			list.add("g");
			list.add("h");
			list.add("i");
			pageContext.setAttribute("list", list);
		%>
		<c:forEach items="${list }" var="str">
			${str }<br>
		</c:forEach>
		<hr>
		<c:forEach items="${list }" var="str" begin="2" end="6" step="2">
			${str }<br>
		</c:forEach>
		<hr>
		<c:forEach items="${list }" var="str" varStatus="sta">
			${sta.count}-${str }<br>
		</c:forEach>
	</body>
</html>